package com.qf.base.utils;

import com.alibaba.fastjson.JSON;
import org.apache.tomcat.util.codec.binary.Base64;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 文件与base64编解码的问题
 * 为了保证接口的rest风格，所以用base64
 *
 */
public class FileBase64Util {
    /**
     * base64转换为bufferedimage的方法
     * @param base64 一个base64字符串
     * @return  一个bufferedimage图片
     */
    public static BufferedImage base64Image(String base64){
       //如果入参是空就返回null
        if (base64==null||"".equals(base64)){
           return null;
       }
       //进行解码，拿到原市的字节数组
        byte[] buff= Base64.decodeBase64(base64);
        //把字节数组转换为内存流
        ByteArrayInputStream bais=new ByteArrayInputStream(buff);
        try {
            return ImageIO.read(bais);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
   }

    /**
     * bufferdimage转化为base64的方法
     * @param image 一个bufferedimage图片
     * @return 一个base64字符串
     */
    //把bufferedImage转换为base64
   public static String image2Base64(BufferedImage image){
        String base64=null;
       ByteArrayOutputStream stream=new ByteArrayOutputStream();
       try {
           ImageIO.write(image,"png", stream);
       } catch (IOException e) {
           e.printStackTrace();
           return null;
       }
       //把字节数组转换为base64

       base64=Base64.encodeBase64String(stream.toByteArray());
       return base64;
   }

    /**
     * 根据fileName确定图片文件，把图片转换为base64
     * @param fileName  文件名
     * @return base64编码
     */
   public static  String image2Base64(String fileName){
       try {
            Map a=new HashMap<>();
           Iterator<Map.Entry<String, String>> iterator = a.entrySet().iterator();
           Map maps = (Map) JSON.parse("str");
           File file = new File(fileName);
           ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
           //把文件数据写入到内存流中
           ImageIO.write(ImageIO.read(file), "png", byteArrayOutputStream);
            //把内存流的数据变为字节数组
           byte[] bytes = byteArrayOutputStream.toByteArray();
           String base64 = Base64.encodeBase64String(bytes);
            return base64;
       }catch (IOException e){
           e.printStackTrace();
       }
       return null;

   }

    public static void main(String[] args) {

    }
}
